package sword.offer;

import java.util.HashSet;
import java.util.Set;

/**
 * 从若干副扑克牌中随机抽 5 张牌，判断是不是一个顺子，即这5张牌是不是连续的。2～10为数字本身，A为1，J为11，Q为12，K为13，而大、小王为 0 ，可以看成任意数字。A 不能视为 14。
 * 输入: [1,2,3,4,5]
 * 输出: True
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class SixtyOne {
    /**
     * 很多题目其实暗含着答案。比如该题中的抽取5张牌，问是否是连续的。也就意味着，如果最大的一张牌减掉最小的一张牌 >4那么肯定就不是连续的了。
     * 但是 <= 4也并非一定是连续的 ，也要可能有几张牌是重复的，所以就需要做一个重复判断。
     * */
    class Solution {
        public boolean isStraight(int[] nums) {
            Set<Integer> set = new HashSet<>();
            int max = nums[0];
            int min = 13; // 注意这里 初始化为牌面最大的值 或者 更大
            for(int n : nums){
                if(n == 0){
                    continue;
                }
                if(set.contains(n)){
                    return false;
                }
                if(n > max){max = n;}
                if(n < min){min = n;}
                set.add(n);
            }
            return max - min <= 4;
        }
    }
}
